﻿#include "func_cd.h"


//用chdir实现cd命令：切换工作目录，还要通过getcwd
//系统调用将切换后的当前工作目录发送给客户端
void  func_cd(int peerFd,char *path){
 
    //1、路径的预处理（有些符号代表特定路径，不能直接传入chdir等系统调用，会出错,需转成对应的路径名
    char str[4096]={0};
    
    //待升级版本
    /*
    if(path==NULL || strcmp(path,"~")==0){
       //如果路径为空或者”~“，表示转到家目录下：home/用户名，（用户名根据用户决定）
       
    }else if(strcmp(path,"-")==0){
      //表示退回到上一次操作的目录，这个有点难（需要读取日志？）
    }else{
       //其他正常的路径名
       strcpy(str,path);
    }
    */

   //第一期版本(目前使用）,那些需转换的特殊符号一律按错误处理
    strcpy(str,path);
    //2、切换当前工作目录
   
    int ret=chdir(str);

    char *p=NULL;
    
    //3、失败返回错误信息，成功返回当前绝对路径
    if(ret==-1){
       //参数格式不对导致chdir函数出错
       const char*s="wrong path";
       send(peerFd,s,strlen(s),0);
    }else{
       p=getcwd(NULL,0);
       ret=send(peerFd,p,strlen(p),0);
       ERROR_CHECK(ret,-1,"send at func_cd");
    }
    
}

